﻿Imports Newtonsoft.Json

''' <summary>
''' 对话返回的响应体
''' </summary>
Public Class ChatResponse

    ''' <summary>
    ''' 本次请求的唯一标识
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("id")>
    Public Property Id As String

    ''' <summary>
    ''' 本次请求实际使用的模型名称和版本
    ''' Doubao 1.5 代模型的模型名称格式为 doubao-1-5-**，
    ''' 如调用部署doubao-1.5-pro-32k 250115模型的推理接入点，返回model字段信息doubao-1-5-pro-32k-250115。
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("model")>
    Public Property Model As String

    ''' <summary>
    ''' 本次请求创建时间的 Unix 时间戳（秒）
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("created")>
    Public Property Created As Integer

    ''' <summary>
    ''' 固定为 chat.completion.chunk
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("object")>
    Public Property [Object] As String

    ''' <summary>
    ''' 模型生成的 completion 的选择列表
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("choices")>
    Public Property Choices As List(Of ChoicesType)

    ''' <summary>
    ''' 该对话补全请求的用量信息。
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("usage")>
    Public Property Usage As UsageType

    ''' <summary>
    ''' 模型生成的 completion 的选择列表
    ''' </summary>
    Public Class ChoicesType

        ''' <summary>
        ''' 当前元素在 choices 列表的索引
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("index")>
        Public Property Index As Integer

        ''' <summary>
        ''' 模型停止生成 token 的原因。取值范围：
        ''' Stop ： 模型输出自然结束，或因命中请求参数 stop 中指定的字段而被截断
        ''' length：模型输出因达到请求参数 max_token 指定的最大 token 数量而被截断
        ''' content_filter：模型输出被内容审核拦截
        ''' tool_calls：模型调用了工具
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("finish_reason")>
        Public Property FinishReason As String

        ''' <summary>
        ''' (非流式)模型生成的 completion 消息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("message")>
        Public Property Message As MessageType

        ''' <summary>
        ''' (流式)模型生成的 completion 消息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("delta")>
        Public Property Delta As MessageType

        ''' <summary>
        ''' 该 choice 的对数概率信息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("logprobs")>
        Public Property Logprobs As LogprobsType
    End Class

    ''' <summary>
    ''' 该 choice 的对数概率信息。
    ''' </summary>
    Public Class LogprobsType
        ''' <summary>
        ''' 一个包含输出 token 对数概率信息的列表。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("content")>
        Public Property Content As List(Of ContentType)
    End Class

    ''' <summary>
    ''' 概率信息的列表。
    ''' </summary>
    Public Class ContentType
        ''' <summary>
        ''' 输出的 token。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("token")>
        Public Property Token As String

        ''' <summary>
        ''' 该 token 的对数概率。-9999.0 代表该 token 的输出概率极小，不在 top 20 最可能输出的 token 中。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("logprob")>
        Public Property Logprob As Double

        ''' <summary>
        ''' 一个包含该 token UTF-8 字节表示的整数列表。一般在一个 UTF-8 字符被拆分成多个 token 来表示时有用。如果 token 没有对应的字节表示，则该值为 null。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("bytes")>
        Public Property Bytes As Integer()


        ''' <summary>
        ''' 一个包含在该输出位置上，输出概率 top N 的 token 的列表，以及它们的对数概率。在罕见情况下，返回的 token 数量可能少于请求参数中指定的 top_logprobs 值。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("top_logprobs")>
        Public Property TopLogprobs As List(Of TopLogprobsType)
    End Class

    ''' <summary>
    ''' 输出概率 top N 的 token 的列表
    ''' </summary>
    Public Class TopLogprobsType
        ''' <summary>
        ''' 输出的 token。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("token")>
        Public Property Token As String

        ''' <summary>
        ''' 该 token 的对数概率。-9999.0 代表该 token 的输出概率极小，不在 top 20 最可能输出的 token 中。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("logprob")>
        Public Property Logprob As Double

        ''' <summary>
        ''' 一个包含该 token UTF-8 字节表示的整数列表。一般在一个 UTF-8 字符被拆分成多个 token 来表示时有用。如果 token 没有对应的字节表示，则该值为 null。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("bytes")>
        Public Property Bytes As Integer()
    End Class

    ''' <summary>
    ''' 模型生成的 completion 消息
    ''' </summary>
    Public Class MessageType

        ''' <summary>
        ''' 固定为 assistant
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("role")>
        Public Property Role As String

        ''' <summary>
        ''' 模型生成的消息内容，content 与 tool_calls 字段二者至少有一个为非空
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("content")>
        Public Property Content As String

        ''' <summary>
        ''' 模型处理问题的思维链内容。
        ''' 支持返回此字段的模型请参见支持模型。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("reasoning_content")>
        Public Property ReasoningContent As String


    End Class

    ''' <summary>
    ''' 该对话补全请求的用量信息
    ''' </summary>
    Public Class UsageType

        ''' <summary>
        ''' 输入的 prompt token 数量
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("prompt_tokens")>
        Public Property PromptTokens As Integer


        ''' <summary>
        ''' 模型生成的 token 数量
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("completion_tokens")>
        Public Property CompletionTokens As Integer

        ''' <summary>
        ''' 本次请求消耗的总 token 数量（输入 + 输出）
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("total_tokens")>
        Public Property TotalTokens As Integer


        ''' <summary>
        ''' prompt_tokens中命中上下文缓存的tokens数。需要开通上下文缓存功能，并创建缓存才会启用，详细见上下文缓存（Context API）概述。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("prompt_tokens_details")>
        Public Property PromptTokensDetails As PromptTokensDetailsType


        ''' <summary>
        ''' completion tokens 的详细信息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("completion_tokens_details")>
        Public Property CompletionTokensDetails As CompletionTokensDetailsType
    End Class

    ''' <summary>
    ''' 命中上下文缓存的tokens数
    ''' </summary>
    Public Class PromptTokensDetailsType

        ''' <summary>
        ''' 缓存token
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("cached_tokens")>
        Public Property CachedTokens As Integer

    End Class

    ''' <summary>
    ''' completion tokens 的详细信息。
    ''' </summary>
    Public Class CompletionTokensDetailsType

        ''' <summary>
        ''' 推理模型所产生的思维链 token 数量
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("reasoning_tokens")>
        Public Property ReasoningTokens As Integer
    End Class

End Class
